package model

import (
	"gorm.io/gorm"
	"homepage_srv/homepage"
	"smart-health-platforms/config"
)

// 商品SDK表
type GoodSku struct {
	Id     uint32  `gorm:"column:id;type:int UNSIGNED;comment:SDK唯一标识;primaryKey;not null;" json:"id"`       // SDK唯一标识
	GoodId uint32  `gorm:"column:good_id;type:int UNSIGNED;comment:商品ID;not null;" json:"good_id"`           // 商品ID
	Color  string  `gorm:"column:color;type:varchar(128);comment:商品配色;not null;" json:"color"`               // 商品配色
	Stock  uint32  `gorm:"column:stock;type:int UNSIGNED;comment:属性对应的库存;not null;default:0;" json:"stock"`  // 属性对应的库存
	Sales  uint32  `gorm:"column:sales;type:int UNSIGNED;comment:销量;not null;default:0;" json:"sales"`       // 销量
	Price  float64 `gorm:"column:price;type:decimal(8, 2);comment:商品价格;not null;" json:"price"`              // 商品价格
	Image  string  `gorm:"column:image;type:varchar(128);comment:图片;default:NULL;" json:"image"`             // 图片
	Weight float64 `gorm:"column:weight;type:decimal(8, 2);comment:重量;not null;default:0.00;" json:"weight"` // 重量
	Volume float64 `gorm:"column:volume;type:decimal(8, 2);comment:体积;not null;default:0.00;" json:"volume"` // 体积
}

func (gs *GoodSku) TableName() string {
	return "good_sku"
}

// 商品SDK添加
func (gs *GoodSku) Create() error {
	return config.DB.Create(gs).Error
}

// 单个查询
func (gs *GoodSku) GetGoodSuk() error {
	return config.DB.Where("id = ?", gs.Id).Limit(1).Find(&gs).Error
}

// 商品SDK列表
func (gs *GoodSku) GoodSKU(goodId uint64) (goodSDKList []*homepage.GoodSKU, err error) {
	err = config.DB.Model(&GoodSku{}).Where("good_id = ?", goodId).Find(&goodSDKList).Error
	return
}

func (gs *GoodSku) GetByGoodId(Id int) error { //根据商品ID获取商品SKU
	return config.DB.Model(&GoodSku{}).Where("id = ?", Id).Limit(1).Find(&gs).Error
}

func (gs *GoodSku) UpdateGoodsStock(tx *gorm.DB) error { //订单同步库存
	return config.DB.Model(&GoodSku{}).Where("id = ?", gs.Id).Update("stock", gs.Stock).Error
}
func (gs *GoodSku) UpdateSeckillStock() error { //创建秒杀活动扣减库存
	return config.DB.Model(&GoodSku{}).Where("id = ?", gs.Id).Update("stock", gs.Stock).Error
}
